---
sidebar_position: 3
id: build
title: 部署
---



## Dinky部署


import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<Tabs groupId="operating-systems">
<TabItem value="linux" label="Linux" default>

** 解压到指定目录 **

Dinky 不依赖任何外部的 Hadoop 或者 Flink 环境，可以单独部署在 flink、 hadoop 和 K8S 集群之外，完全解耦，支持同时连接多个不同的集群实例进行运维。

```shell
tar -zxvf dinky-release-{version}.tar.gz
mv dinky-release-{version} dinky
cd dinky
```

</TabItem>
</Tabs>


### 配置文件

创建好数据库后，修改 Dinky 连接 mysql 的配置文件。

```shell
#切换目录
cd /opt/dinky/config/
vim application.yml
```


### 加载依赖

Dinky 需要具备自身的 Flink 环境，该 Flink 环境的实现需要用户自己在 Dinky 根目录下 plugins/flink${FLINK_VERSION} 文件夹并上传相关的 Flink 依赖，如 flink-dist, flink-table 等，具体见下文。当然也可在启动文件中指定 FLINK_HOME，但不建议这样做。

:::warning 注意事项
Dinky 当前版本的 yarn 的 perjob 与 application 执行模式依赖 flink-shade-hadoop ，如果你的 Hadoop 版本为 2+ 或 3+，需要额外添加 flink-shade-hadoop-uber-3 包，请手动删除该包内部的 javax.servlet 等冲突内容。
当然如果你的 Hadoop 为 3+ 也可以自行编译对于版本的 dinky-client-hadoop.jar 以替代 uber 包，
:::

将 flink-shade-hadoop 上传到到 plugins 文件目录下，使用 flink-shade-hadoop-3 地址如下：

```
https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber?repo=cloudera-repos
```

如果是 CDH 及 HDP 使用开源 flink-shade 对 Dinky 没有任何影响，其他用到的依赖取决于 CDH 或者 HDP 与开源版本的兼容性，需要自行根据兼容性添加依赖即可正常使用 Dinky 的所有功能。

最终项目根目录如下，仅供参考：

```
├── auto.sh -- 启动停止脚本
├── config -- 配置文件
│   ├── DinkyFlinkDockerfile -- k8s 集群配置自动构建镜像的Dockerfile
│   └── log4j2.xml -- 日志文件
│   └── application.yml -- 主要程序运行配置文件
├── jar
│   ├── Dockerfile
│   ├── dlink-app-1.11-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.11.x application
│   ├── dlink-app-1.12-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.12.x application
│   ├── dlink-app-1.13-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.13.x application
│   ├── dlink-app-1.14-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.14.x application
│   ├── dlink-app-1.15-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.15.x application
│   └── dlink-app-1.16-0.7.0-jar-with-dependencies.jar -- 适配 Flink1.16.x application
├── lib
│   ├── dlink-admin-0.7.0.jar --主程序包
│   ├── dlink-alert-base-0.7.0.jar
│   ├── dlink-alert-dingtalk-0.7.0.jar
│   ├── dlink-alert-email-0.7.0.jar
│   ├── dlink-alert-feishu-0.7.0.jar
│   ├── dlink-alert-wechat-0.7.0.jar
│   ├── dlink-client-base-0.7.0.jar
│   ├── dlink-common-0.7.0.jar
│   ├── dlink-core-0.7.0.jar
│   ├── dlink-daemon-0.7.0.jar
│   ├── dlink-executor-0.7.0.jar
│   ├── dlink-function-0.7.0.jar
│   ├── dlink-gateway-0.7.0.jar
│   ├── dlink-metadata-base-0.7.0.jar
│   ├── dlink-metadata-clickhouse-0.7.0.jar
│   ├── dlink-metadata-doris-0.7.0.jar
│   ├── dlink-metadata-hive-0.7.0.jar
│   ├── dlink-metadata-mysql-0.7.0.jar
│   ├── dlink-metadata-oracle-0.7.0.jar
│   ├── dlink-metadata-phoenix-0.7.0.jar
│   ├── dlink-metadata-postgresql-0.7.0.jar
│   ├── dlink-metadata-presto-0.7.0.jar
│   ├── dlink-metadata-sqlserver-0.7.0.jar
│   ├── dlink-metadata-starrocks-0.7.0.jar
│   ├── dlink-process-0.7.0.jar
│   ├── dlink-scheduler-0.7.0.jar
├── plugins
│   ├── flink1.11  -- 适配 Flink1.11.x
│   │   └── dlink-client-1.11-0.7.0.jar
│   ├── flink1.12  -- 适配 Flink1.12.x
│   │   └── dlink-client-1.12-0.7.0.jar
│   ├── flink1.13  -- 适配 Flink1.13.x
│   │   ├── dlink-catalog-mysql-1.13-0.7.0.jar -- dlink 的 catalog 实现
│   │   └── dlink-client-1.13-0.7.0.jar
│   ├── flink1.14  -- 适配 Flink1.14.x,默认
│   │   ├── dlink-catalog-mysql-1.14-0.7.0.jar -- dlink 的 catalog 实现
│   │   └── dlink-client-1.14-0.7.0.jar
│   │   └── flink-shaded-hadoop-3-uber-3.1.1.7.2.1.0-327-9.0.jar
│   ├── flink1.15  -- 适配 Flink1.15.x
│   │   ├── dlink-catalog-mysql-1.15-0.7.0.jar -- dlink 的 catalog 实现
│   │   └── dlink-client-1.15-0.7.0.jar
│   └── flink1.16  -- 适配 Flink1.15.x
│       ├── dlink-catalog-mysql-1.16-0.7.0.jar -- dlink 的 catalog 实现
│       └── dlink-client-1.16-0.7.0.jar
└── sql
    ├── dinky.sql -- Mysql初始化脚本
    └── upgrade  -- 各个版本的升级 SQL
```

:::tip
推荐公共 jar 包放在 plugins 目录下，Flink 版本化的依赖放在 plugins/flink${FLINK_VERSION}
:::

### 启动 Dinky

```shell
#启动
$sh auto.sh start
#停止
$sh auto.sh stop
#重启
$sh auto.sh restart
#查看状态
$sh auto.sh status
```

#### 版本适配
启动指令的第二个参数则是版本选择，支持 【1.11, 1.12, 1.13, 1.14, 1.15, 1.16】,参考指令如下：
```shell
#启动
$sh auto.sh start 1.14
```
对应 `Flink` 版本的依赖，放在Dinky 安装目录下 plugins/flink${FLINK_VERSION}下


### Flink 任务监控（可选）

参考[flink 任务运行监控](../extend/function_expansion/flinktaskmonitor)



:::tip 说明
服务启动后，默认端口 8888，[http://127.0.0.1:8888](http://127.0.0.1:8888) , 默认用户名/密码: admin/admin

Dinky 部署需要 MySQL5.7 以上版本

Dinky 不依赖于 Nginx， Nginx 可选
:::

---

## 数据库初始化

Dinky 采用 mysql 作为后端的存储库，mysql 支持 5.7+。这里假设你已经安装了 mysql 。首先需要创建 Dinky 的后端数据库，这里以配置文件中默认库创建。

在 Dinky 根目录 sql 文件夹下分别放置了 dinky.sql 、 upgrade/${version}_schema/mysql/ddl 和 dml。如果第一次部署，可以直接将 sql/dinky.sql 文件在 dinky 数据库下执行。（如果之前已经部署，那 upgrade 目录下 存放了各版本的升级 sql ，根据版本号按需执行即可）

<Tabs groupId="operating-systems">
<TabItem value="mysq5" label="mysql-5.x" default>

```sql
#登录mysql
mysql -uroot -proot@123
#创建数据库
mysql>
create database dinky;
#授权
mysql>
grant all privileges on dinky.* to 'dinky'@'%' identified by 'dinky' with grant option;
mysql>
flush privileges;
#此处用 dinky 用户登录
mysql -h fdw1 -udinky -pdinky
```

</TabItem>
<TabItem value="mysql8" label="mysql-8.x">

```sql
#登录mysql
mysql -uroot -proot@123
#创建数据库
mysql>
CREATE DATABASE dinky;
#创建用户并允许远程登录
mysql>
create user 'dinky'@'%' IDENTIFIED WITH mysql_native_password by 'dinky';
#授权
mysql>
grant ALL PRIVILEGES ON dinky.* to 'dinky'@'%';
mysql>
flush privileges;
```

</TabItem>
</Tabs>


#### 第一次部署

```sql
#首先登录 mysql
mysql -h fdw1  -udinky -pdinky
mysql>
use dinky;
mysql> source /opt/dinky/sql/dinky.sql
```

---

## 前后端分离部署
### 部署 `Nginx`（可选）

在 linux，首先要配置好相应的 yum 库，因为在安装过程中没有配置，这里可以大概讲述下步骤，可以选择连接网络或者本地 yum 源都可以，这里选择连接网络方式配置。

```shell
#下载yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除缓存
yum makecache
#接下来安装nginx
yum -y install epel-release
yum -y install nginx
sudo systemctl enable nginx
sudo service nginx start
sudo service nginx reload
nginx -v
#最后查看进程看是否正常启动
ps -ef|grep nginx
```

说明: Dinky-0.5.0 以上版本部署 nginx 为可选

### nginx中配置 Dinky（可选）

如果是 yum 源安装的 nginx，配置文件在 etc 下，如果是源码包安装，请自行找到配置文件

```shell
#切换到nginx配置目录
cd /etc/nginx/
```

vim /etc/nginx/nginx.conf 打开配置文件，修改 server 中的内容，其内容按照如下配置即可。

```
  server {
        listen       9999;
        #listen       [::]:80;
        server_name  bigdata3;
        root         /usr/share/nginx/html;
                gzip on;
     		gzip_min_length 1k;
		gzip_comp_level 9;
		gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
		gzip_vary on;
		gzip_disable "MSIE [1-6]\.";

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            root   html;
            index  index.html index.htm;
			try_files $uri $uri/ /index.html;
        }
        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }

        location ^~ /api {
            proxy_pass http://192.168.0.0:8888;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP         $remote_addr;
        }
    }
```

修改内容:

- listen 监听端口；
- 存放html路径；
- location / 这里可以指定为绝对路径

配置完成后，保存退出。并重启 nginx 并重新加载生效

```shell
$systemctl restart nginx.service
$systemctl reload nginx.service
#查看nginx是否配置成功
nginx -t
$nginx -s reload
```

